package cn.tedu.net.thread;
//本类用来测试多线程编程实现方案一
public class Test1_Thread {
    public static void main(String[] args) {
        MyThread me=new MyThread();//新建线程
        MyThread me2=new MyThread();//再新建线程
        MyThread me3=new MyThread("你吃耙儿");//传参建立线程
        /*如果只是调用两个线程的run()会按顺序依次执行,不会有多线程的效果
        * 所以想要使用多线程效果,必须把start()才真正把线程加入就绪队列
        * run()只是当作一个普通单线程方法来运行,没有多线程效果
        * 当我们调用start(),底层会自动调用run()执行业务
        *
        *
        * 线程的随机性:cpu会自动调度线程们,我们无法控制
        * */
        //me.run();
        //me2.run();
        me.start();//对应的是就绪状态
        me2.start();
        me3.start();
    }
}
//自定义多线程类,继承Thread类
class MyThread extends Thread{
    public MyThread() {
    }

    public MyThread(Runnable target) {
        super(target);
    }

    public MyThread(ThreadGroup group, Runnable target) {
        super(group, target);
    }

    public MyThread(String name) {//为了修改线程的名称,不再使用系统的默认名称,提供含参构造,并再构造中调用
        // 父类给线程提供的函数起名
        super(name);
    }

    public MyThread(ThreadGroup group, String name) {
        super(group, name);
    }

    public MyThread(Runnable target, String name) {
        super(target, name);
    }

    public MyThread(ThreadGroup group, Runnable target, String name) {
        super(group, target, name);
    }

    public MyThread(ThreadGroup group, Runnable target, String name, long stackSize) {
        super(group, target, name, stackSize);
    }

    //线程中的业务是写在run方法里的
    @Override
    //重写Thread父类中的run()
    public void run() {
        //输出10次正在执行的线程名称
        for (int i = 0; i < 10; i++) {
            System.out.println(i+"="+getName());//获取当前正在执行的线程名称
        }
    }
}